//package websocket.com.java.websocket;
//
//import java.io.IOException;
//import java.util.concurrent.CopyOnWriteArraySet;
//import java.util.concurrent.atomic.AtomicInteger;
//
//import javax.websocket.OnClose;
//import javax.websocket.OnError;
//import javax.websocket.OnOpen;
//import javax.websocket.Session;
//import javax.websocket.server.ServerEndpoint;
//
//
//import code.com.java.bidding.BiddingVo;
//import code.com.java.redis.LockNameManager;
//import code.com.java.redis.RedisTool;
//import redis.clients.jedis.Jedis;
//
///**
//
// * <p>Title: WebSocket</p>
//
// * <p>Description: websocket</p>
//
// * @author Cter
//
// * @date 2018年6月6日
//
// */
//@ServerEndpoint("/webSocket")
//public class WebSocket {
//    /*
//     * 当前连接数,考虑一下设计成线程安全的
//     */
//    private static AtomicInteger onlineCount = new AtomicInteger(0);
//    /*
//     * 存放每个客户端对应的WebSocket,key为用户标识
//     */
//    private static CopyOnWriteArraySet<WebSocket> webSocketSet = new CopyOnWriteArraySet<WebSocket>();
//    /*
//     * 和客户端连接的session,通过session来传递数据
//     */
//    private Session session;
//
//    /**
//     *
//
//     * <p>Title: onOpen</p>
//
//     * <p>Description:连接建立成功调用的方法 </p>
//
//     * @param session 可选的参数,session为与某个客户端的连接会话，需要通过它给客户端发送数据
//     */
//    @OnOpen
//    public void onOpen(Session session) {
//        this.session = session;
//        webSocketSet.add(this);
//
//        addOnlineCount();
//        System.out.println("有新连接加入,当前连接数为："+onlineCount);
//    }
//
//    /**
//     *
//
//     * <p>Title: onClose</p>
//
//     * <p>Description: 连接关闭调用</p>
//     */
//    @OnClose
//    public void onClose() {
//        webSocketSet.remove(this);
//        subOnlineCount();
//        System.out.println("有连接断开,当前连接数为："+onlineCount);
//    }
//
//
//    /**
//     *
//
//     * <p>Title: OnMessage</p>
//
//     * <p>Description: 收到客户端调用来的消息</p>
//
//     * @param message
//     * @param session
//     */
//    @javax.websocket.OnMessage
//    public void OnMessage(String message,Session session) {
//        String[] messageArr = message.split(",");
//        boolean isSuccess = false;
//        if(messageArr!= null && messageArr.length>0) {
//            BiddingVo vos = new BiddingVo(Integer.parseInt(messageArr[0]),Integer.parseInt(messageArr[1]),messageArr[2]);
//            Jedis jedis = new Jedis("localhost");
//            while(true) {
//                try {
//                    if(RedisTool.tryGetDistributedLock(jedis, LockNameManager.BIDDINGLOCK, session.getId(), 60*5)) {
//                        isSuccess = BiddingUtil.ChangebidList(vos);
//                        break;
//                    }
//                }catch(Exception e) {
//                    e.printStackTrace();
//                }finally {
//                    RedisTool.releaseDistributedLock(jedis, LockNameManager.BIDDINGLOCK, session.getId());
//                }
//
//            }
//        }
//        System.out.println("来自客户端的消息："+message);//实际操作代码
//        if(isSuccess) {
//            for(WebSocket web:webSocketSet) {
//                try {
//                    web.sendMessage(BiddingUtil.showBidlist());
//                }catch(Exception e) {
//                    e.printStackTrace();
//                    continue;
//                }
//            }
//        }else {
//            try {
//                this.sendMessage("价格或者数量不合理");
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//
//    }
//
//    @OnError
//    public void onError(Session session, Throwable error) {
//        System.out.println("发生错误");
//        error.printStackTrace();
//    }
//
//    public void sendMessage(String message) throws  IOException{
//        this.session.getBasicRemote().sendText(message);
//    }
//
//    public static int getOnlineCount() {
//        return onlineCount.get();
//    }
//
//    public static void addOnlineCount() {
//        onlineCount.getAndIncrement();
//    }
//
//    public static void subOnlineCount() {
//        onlineCount.decrementAndGet();
//    }
//
//
//
//
//
//
//
//
//
//
//
//
//
//}
